package com.yami.shop.rights.common.dao;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.yami.shop.bean.param.CustomerManagerParam;
import com.yami.shop.bean.param.RightsParam;
import com.yami.shop.common.util.PageParam;
import com.yami.shop.mystery.common.dto.ActivityPresellDto;
import com.yami.shop.rights.common.dto.ActivityPresellQualificationDto;
import com.yami.shop.rights.common.dto.PersonRightsDto;
import com.yami.shop.rights.common.model.PersonRights;
import com.yami.shop.rights.common.model.ProdRights;
import com.yami.shop.rights.common.vo.PersonnftRightsVo;
import com.yami.shop.rights.common.vo.ProdRightDetailVo;
import com.yami.shop.rights.common.vo.ProdRightsVo;
import org.apache.ibatis.annotations.Param;

import java.util.List;

public interface PersonRightsMapper extends BaseMapper<PersonRights> {

    // 获取用户持有权益信息
    List<ProdRights> listUserByRightsIds(@Param("userId") String userId, @Param("rightsIds") List<String> rightsIds);

    // 通过持仓权益ID获取详细信息
    PersonnftRightsVo getProdRightsById(@Param("personRightsId") Long rightsId);
    ProdRightsVo getProdInfoByPersonRightsId(@Param("personRightsId") Long rightsId);

    // 获取权益剩余次数
    Long getPresellerSurplusTimes(@Param("id")long id);

    // 通过商品获取预售活动
    ActivityPresellDto selectPresellMystery(@Param("prodId") long prodId);

    // 通过商品ID 用户信息获取购买资格信息 --- 通过权益类型排序 先查 权益类型 （ 先查指定商品 ）
    List<ActivityPresellQualificationDto> getPresellerQualification(@Param("prodId") long prodId,@Param("orderMold") Integer orderMold,@Param("userId") String userId);

    // 扣除权益次数
    void verificationPresellerRights(@Param("id") long id,@Param("times") long times);

    // 通过tokenId 获取权益列表信息
    List<PersonRightsDto> getPersonRightsByTokenId(@Param("tokenId") String tokenId,@Param("type") String type);

    void updatePersonRights(@Param("personRightsId") String personRightsId,@Param("userId") String userId,@Param("toUserId") String toUserId);

    IPage<PersonRightsDto> getPersonRightsByProdIds(PageParam<ProdRightDetailVo> page, @Param("prodIds") List<Long> tokenIds,@Param("userId") String userId,@Param("status") Integer status);

    IPage<ProdRights>  getPersonRightsByProId(PageParam<ProdRights> page,@Param("reqParam") RightsParam rightsParam);

    List<PersonRightsDto> getPersonRightsByPersonRightsId(@Param("personRightsId")Long personRightsId);
}
